草庐IT

Python NotImplemented 常量

全部标签

c++ - 在构造函数中初始化多个相关常量属性的最简单方法?

当一个C++类的多个const属性依赖于一些中间计算时,初始化它们的最简单方法是什么?例如,如何更正下面类的构造函数?classMyClass{public:constinta;constintb;MyClass(){intrelatedVariable=rand()%250;a=relatedVariable%100;b=abs(relatedVariable-150);}}; 最佳答案 在C++11中,您可以简单地使用委托(delegate)构造函数:classMyClass{public:constinta;constintb

c++ - 一个对象能知道它自己的常量吗?

使用decltype和std::is_const可以从外部检测变量的常量性。但是对象是否也可以知道自己的常量?用法应该是这样的:#include#include#includestructTest{Test(){}boolprint()const{//doesnotworkasisexplainedinhttps://stackoverflow.com/q/9890218/819272returnstd::is_const::value;//::value::value在LiveWorkSpace上输出这有可能吗?动机:我希望能够检测const成员函数是在const对象上调用还是来自非

c++ - 编译器是否不允许假定 const-ref 参数将保持常量?

例如:https://godbolt.org/g/5eUkrxvoidf(constint&);voidg1(){constinti=42;if(i==42)f(i);if(i==42)f(i);}voidg2(){inti=42;if(i==42)f(i);if(i==42)f(i);}似乎“f”改变其参数应该是UB,因此应该允许编译器假定它不会发生并相应地进行优化。然而这两个函数会产生不同的装配。我没有标准的拷贝。这不是保证吗? 最佳答案 根据标准,在C++中将一个指向常量的指针转换为指向非常量的指针,然后修改它(尽管这很困惑)

c++ - 如何在源文件中嵌入 unicode 字符串常量?

我正在编写一些单元测试,这些测试将验证我们对使用除正常拉丁字母之外的其他字符集的各种资源的处理:西里尔字母、希伯来字母等。我遇到的问题是我找不到将期望值嵌入测试源文件的方法:这是我正在尝试做的事情的示例...//////Protected:TestGetHebrewConfigString///voidCPrIniFileReaderTest::TestGetHebrewConfigString(){prwstringstrHebrewTestFilePath=GetTestFilePath(strHebrewTestFileName);CPrIniFileReaderprIniLis

c++ - C++ 中的常量正确性语义

为了乐趣和利润™,我正在用C++(使用C++11标准)编写一个trie类。我的trie有一个迭代器,trie::iterator.(它们实际上都是功能性const_iterators,因为您不能修改trie的value_type。)迭代器的类声明部分如下所示:templateclasstrie::iterator:publicstd::iterator{friendclasstrie;structstate{state(consttrie*constnode,consttypenamestd::vector>>>::const_iterator&node_map_it):node{no

c# - 如何在 C# 中实现常量正确性?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:“constcorrectness”inC#我使用C++编程多年,但对C#还很陌生。在学习C#时,我发现const的使用关键字比C++更受限制。据我所知,forexample,无法声明函数const的参数。我对我可能会无意中更改我只能通过测试检测到的函数参数(可能是复杂的数据结构)的想法感到不安。你如何处理这种情况?

C++ - 迭代元组和类型解析与常量参数

我目前正在为元组编写算术运算符重载。运算符遍历元组以对其每个单独的元素执行操作。这是运算符+=的定义:templateinlinetypenamestd::enable_if&>::typeoperator+=(std::tuple&lhs,conststd::tuple&rhs){returnlhs;}templateinlinetypenamestd::enable_if&>::typeoperator+=(std::tuple&lhs,conststd::tuple&rhs){std::get(lhs)+=std::get(rhs);returnoperator+=(lhs,rh

c++ - 我可以在编译时检测到 "function arguments"是编译时常量吗

我可以在编译时检测“函数参数”1是否是编译时常量吗?例如,函数print(inti)如果调用print(5)可以打印"constant5"但是"non-constant5"如果作为print(i)调用,其中i是一些非常量变量。特别是,在“isconstant”分支中,我应该能够将i视为constexpr,包括将其用于模板参数等。宏技巧、模板元编程和SFINAE技巧都可以。理想情况下它是可移植的,但特定于编译器的解决方案总比没有好。如果存在“假阴性”也没关系-即,如果常量值有时被检测为非常量(例如,当某些优化被禁用时)。如果解决方案可以检测到常量值何时被间接传递给函数(例如,当常量值被传

c++ - 是否有扩展让优化器假定 const-ref 参数将保持常量?

与我之前的问题相关:Arecompilersnotallowedtoassumeconst-refparameterswillstayconst?我的新问题是:是否有特定于编译器的非标准扩展或语法来告诉GCC/Clang/MSVC对象不可写?例如,这是我希望能够编写的一些伪代码:voidf(constint&i){//Atthispoint,compilerdoesn'tknowif"i"canbemutatedornot,//soitassumesitcan//Fake-ish--compilernowassumes"i"cannotbemutatedandoptimizesacco

c++ - 警告不精确的浮点常量

像“为什么不是0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1=0.8?”这样的问题让我想到了.........让编译器警告它四舍五入到二进制浮点类型中最接近的可表示的浮点常量可能会很好(例如0.1和0.8在radix-2float中四舍五入,否则他们将需要无限量的空间来存储无限数量的数字)。我查看了gcc警告,到目前为止没有找到用于此目的的警告(-Wall、-Wextra、-Wfloat-equal、-Wconversion、-Wcoercion(不支持或仅限C?)、-Wtraditional(仅限C)似乎没有做我想做的事情想要)。我也没有在MicrosoftVisua